package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.ExperienciaVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Carol
 */
public class ExperienciaDAO extends BaseDAO<ExperienciaVO> {

    @Override
    public void inserir(ExperienciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_EXPERIENCIA(CD_Talento, NO_Empresa, DS_Cargo, DS_Funcao, DS_Atividade, DT_Entrada, DT_Saida)");
        query.append("VALUES (?, ?, ?, ?, ?, ?, ?)");

        List<?> parametros = criarParametros(entidade.getCdTalento(), entidade.getNoEmpresa(), entidade.getDsCargo(), entidade.getDsFuncao(), entidade.getDsAtividade(), entidade.getDtEntrada(), entidade.getDtSaida() );

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();

        entidade.setIdExperiencia(idGerado);
    }

    @Override
    public void alterar(ExperienciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_EXPERIENCIA SET CD_TALENTO = ?,");
        query.append("NO_EMPRESA = ?,");
        query.append("DS_CARGO = ?,");
        query.append("DS_FUNCAO = ?,");
        query.append("DS_ATIVIDADE = ?,");
        query.append("DT_ENTRADA = ?,");
        query.append("DT_SAIDA = ?");
        query.append("WHERE ID_EXPERIENCIA = ?");

        List<?> parametros = criarParametros(entidade.getCdTalento(), entidade.getNoEmpresa(),
                entidade.getDsCargo(), entidade.getDsFuncao(), entidade.getDsAtividade(),
                entidade.getDtEntrada(), entidade.getDtSaida());

        executarAlteracao(query.toString(), parametros);
    }

    @Override
    public void excluir(ExperienciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_EXPERIENCIA");
        query.append("WHERE ID_EXPERIENCIA = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdExperiencia()));
    }
    
    @Override
    public ExperienciaVO consultarPorId(Serializable id) {

        ExperienciaVO experiencia = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_EXPERIENCIA T WHERE T.ID_EXPERIENCIA = ?");

        experiencia = consultarUm(query.toString(), criarParametros(id));

        return experiencia;
    }

    @Override
    public List<ExperienciaVO> consultarPorExemplo(ExperienciaVO experiencia) {

        List<ExperienciaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_EXPERIENCIA T WHERE 1=1");

        mapearQueryParaExemplo(query, experiencia);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

   
    
    @Override
    protected ExperienciaVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        ExperienciaVO experiencia = new ExperienciaVO();

        experiencia.setIdExperiencia(rs.getInt("ID_EXPERIENCIA"));
        experiencia.setCdTalento(rs.getInt("CD_TALENTO"));
        experiencia.setNoEmpresa(rs.getString("NO_EMPRESA"));
        experiencia.setDsCargo(rs.getString("DS_CARGO"));
        experiencia.setDsFuncao(rs.getString("DS_FUNCAO"));
        experiencia.setDsAtividade(rs.getString("DS_ATIVIDADE"));
        experiencia.setDtEntrada((rs.getString("DT_ENTRADA").equals("0000-00-00")?null:rs.getDate("dt_entrada")));
        experiencia.setDtSaida((rs.getString("DT_SAIDA").equals("0000-00-00")?null:rs.getDate("dt_saida")));

        return experiencia;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, ExperienciaVO exemplo) {

        if (exemplo.getCdTalento() != null) {
            query.append("AND T.CD_TALENTO = ?");
            adicionarParametro(exemplo.getCdTalento());
        }
    }
}
